package cn.tedu.jsd2205the.back.end.project.mapper;

import cn.tedu.jsd2205the.back.end.project.pojo.dto.ProductPagerDTO;
import cn.tedu.jsd2205the.back.end.project.pojo.entity.Product;
import cn.tedu.jsd2205the.back.end.project.pojo.vo.ProductListItemVO;
import cn.tedu.jsd2205the.back.end.project.pojo.vo.ProductSimpleVO;
import cn.tedu.jsd2205the.back.end.project.pojo.vo.ProductSubOrderDetailVO;
import cn.tedu.jsd2205the.back.end.project.pojo.vo.ProductViewHistoryDetailVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface ProductMapper {
    /**
     * 增加商品
     * @param product 商品
     * @return
     */
    int insert(Product product);

    /**
     * 根据id删除商品
     * @param id 即将删除的商品id
     * @return 受影响的行数
     */
    int deleteById(int id);

    /**
     * 根据商品名称删除商品
     * @param name 即将删除的商品名
     * @return 受影响的行数
     */
    int deleteByName(String name);
    /**
     *子订单显示商品信息
     * @param id 将用于查询的商品信息id
     * @return
     */
    ProductSubOrderDetailVO selectSubOrderDetailById(int id);

    /**
     * 查询最近上架的3件商品
     * @return
     */
    List<ProductSimpleVO> selectNew();

    /**
     * 查询商品列表
     * @return
     */
    List<ProductListItemVO> selectAll();

    /**
     * 通过id 查询商品信息(全部)
     * @param id
     * @return
     */
    ProductListItemVO selectById(Integer id);

    /**
     * 通过名字查询商品信息
     * @param name
     * @return
     */
    ProductListItemVO selectByName(String name);

    /**
     * 通过id查询商品(简单信息)
     * @param id
     * @return
     */
    ProductViewHistoryDetailVO selectDetailById(Integer id);

    /**
     * 通过商品类型id查询商品
     * @param categoryId
     * @return
     */
    List<ProductSimpleVO> selectByCid(int categoryId);

    /**
     * 根据商品类型id和商品名查询商品
     * @param productPagerDTO
     * @return
     */
    List<Product> selectByPage(ProductPagerDTO productPagerDTO);

    /**
     * 查询总记录数
     * @param productPagerDTO
     * @return
     */
    int selectCountByPage(ProductPagerDTO productPagerDTO);

    /**
     * 通过id查询商品数量
     * @param id
     * @return
     */
    int selectQuantityById(int id);

    /**
     * 通过id修改商品数量
     * @param id
     * @param quantity
     * @return
     */
    int updateQuantityById(@Param("id") int id, @Param("quantity") int quantity);

    /**
     * 商品浏览量增1
     * @param id
     * @return
     */
    int increaseViewCount(int id);

    /**
     * 商品浏览量增1
     * @param name
     * @return
     */
    int ViewCountByName(String name);

}
